package com.cs.paoyer.common.exception;

/**
 *
 * <p>Title: ModuleExceptionFactory</p>
 * <p>Description: Factory para generar las Excepciones por cada Modulo</p>
 * Es utlizada por una instancia de las clase UserException o SystemException
 * para visualizar detalles de un error determinado.
 * @version 1.0
 */

public abstract class ModuleExceptionFactory {

  /**
   * Devuelve la instancia de la Excepcion correspondiente al Modulo
   *
   * @param module String Nombre de la Clase del Modulo
   * @return ModuleExceptionInterface
   */
  public static ModuleExceptionInterface getModuleException(String module) throws SystemException {

    ModuleExceptionInterface moduleException = null;

    try {
      //Crea la Instancia de la Clase dinamicamente
      Class objectModule = Class.forName(module);
      moduleException = (ModuleExceptionInterface) objectModule.newInstance();
      return moduleException;
    }
    catch (IllegalAccessException iaEx) {
      throw new SystemException(new CommonSystemException().getModuleVO(),
                                CommonSystemException.MODULE_EXCEPTION_NOT_CREATED);
    }
    catch (InstantiationException iEx) {
      throw new SystemException(new CommonSystemException().getModuleVO(),
                                CommonSystemException.MODULE_EXCEPTION_NOT_CREATED);
    }
    catch (ClassNotFoundException cnfEx) {
      throw new SystemException(new CommonSystemException().getModuleVO(),
                                CommonSystemException.MODULE_EXCEPTION_NOT_FOUND);
    }
    catch (ClassCastException ccEx) {
      throw new SystemException(new CommonSystemException().getModuleVO(),
                                CommonSystemException.CLASS_CAST_MODULE_EXCEPTION);
    }

  }

}